//express()用来创建一个Express的程序。express()方法是express模块导出的顶层方法。
const express = require("express");
const app = express();
//引入body-parser,bodyparser是一类处理request的body的中间件函数,对传入的请求体进行解析
const bodyParser = require("body-parser");

// 导入 cors 中间件
const cors = require('cors')
// 将 cors 注册为全局中间件
app.use(cors())


//指定端口为环境变量PORT中的内容，如果没有，则为5000
const port = process.env.PORT || 5000;
const mongoose = require("mongoose");

//引入数据库地址
//1、可以直接连：test为mongodb中的数据库,如果test数据库不存在,则会自动创建,可以自行更改: mongoose.connect('mongodb://127.0.0.1:27017/test')
//2、也可以新建文件 keys 外部引用连接：
const db = require("./config/keys").mongoURI;

//引入路由模块
const users = require("./routes/api/users");
const profiles = require("./routes/api/profiles");



//使用：路由HTTP GET请求到有特殊回调的特殊路径
app.get("/", (req, res) => {  // '/'即首页
  res.send("hello 并vvorld");
}); 


//使用 mongoose.connect() 方法连接 MongoDB,成功就输出"连接成功",出现异常时输出错误
mongoose
  .connect(db)
  .then(() => {
    console.log("MongoDB connected!哈哈哈啊");
  })
  .catch((err) => {
    console.log(err);
  });


//使用body-parser中间件，这是常用的方法，常见的前端请求解决方案如表单post提交、axios、fetch等库的post请求都需要这个中间件进行解析，返回json的格式数据。当请求的数据类型是application/x-www-form-urlencoded时才会进入这个中间件进行处理。
//app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.urlencoded({ extended: false }));


//解析并返回 json格式的数据，这是常用的方法。内部会查看content-type，只有是正确的content-type默认是application/json才进入这个中间件解析处理。
app.use(bodyParser.json());

//验证token：先引入passport
const passport = require("passport");
//验证token;passport初始化
app.use(passport.initialize());
require("./config/passport")(passport);

//使用路由routes
app.use("/api/users", users);
app.use("/api/profiles", profiles);

/* // 处理管理员(&用户)登录注册相关的路由
const adminRouter = require('./router/admin')
app.use('/api/admin', adminRouter) */


//绑定程序监听端口到指定的主机和端口号。这个方法和Node中的http.Server.listen()是一样的。
app.listen(port, () => {
    console.log(`server running on port ${port}`);
  });